home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
msdos
/
all_dir
/
vramput.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-18
|
2KB
|
100 lines
/*
* システム行への書き込みプログラム 1991 HIROSHI-NAKAMURA
*
* 使用法 SYSLINE メッセージ 属性(0カラ63) 表示開始桁(1カラ79) 表示行(1カラ25)
*
* メッセージ 任意の文字列。ただし空白は使えません。
* 属性 0=黒 1=青 2=赤 3=紫 4=緑 5=水色 6=黄 7=白 及び 8=反転 32=高輝度
* 色 + 反転 + 高輝度 の合計数値で指定します。
* 桁・行 画面左上を1行1桁として指定します。省略時はシステム行左端。
*/
#include <string.h>
#include <dos.h>
#include <jctype.h>
#include <jstring.h>
#include <memory.h>
struct SREGS *segregs,*sregs ;
printv(str,attr,x,y) /* VRAM書き込み */
unsigned char str[]; /* 文字列 */
char attr ; /* 属性 */
int x,y; /* 桁、行 */
{
int len,i,code ;
static unsigned pos =0 ;
char kan[2],attrib[2],pek[2];
unsigned vramseg1=0xc800,vramseg2=0xca00 ;
if (x < 0 || x >= 80 || y < 0 || y >= 25 )
return(-1);
pos = (y * 80 + x) * 2;
len = strlen(str);
for (i=0;i<len;i++){
if( iskanji(str[i]) && iskanji2(str[i+1]) ){ /* 漢字 */
code = (int)jmstojis( str[i++]*0x100 +str[i+1] ) ;
kan[0]= ( code >> 8 );
kan[1]= code & 0x00ff ;
attrib[0]=attr|0x0040 ;
poke (vramseg1,pos+1,attrib,1) ;
attrib[0]=attr ;
poke (vramseg1,pos+3,attrib,1) ;
poke (vramseg2,pos,kan,2) ;
pos +=4 ;
}
else{
if(str[i] =='\\' && str[i+1]=='n' ){
pos = (pos / 80 + 1) *80;
i++ ;
}
else if( str[i]=='\n' ){
pos = (pos / 80 + 1) * 80 ;
}
else{
peek (vramseg1,pos-1,pek,1) ;
/*if((x%2) && (pek[0] & 0x40)){
poke(vramseg1,pos-2," ",1);
poke(vramseg1,pos-1,attrib,1);
}*/
kan[0]= str[i] ;
kan[1]= 0 ;
attrib[0]= attr ;
poke (vramseg1,pos,kan,1) ;
poke (vramseg1,pos+1,attrib,1) ;
pos +=2 ;
}
}
}
return(len);
}
poke(seg,off,buff,siz) /* メモリ書き込み */
int seg;
int off;
char *buff ;
unsigned siz;
{
struct SREGS s;
segread(&s);
movedata(s.ds,(int)buff,seg,off,siz);
return(0);
}
peek(sseg,soff,dbuff,size)
int sseg;
int soff;
char *dbuff ;
unsigned size;
{
struct SREGS s;
segread(&s);
movedata(sseg,soff,s.ds,(int)dbuff,size);
return(0);
}